package com.mygame.common.eventsystem;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @ClassName: EventDispatchManager
 * @Description: 事件分发管理器
 * @author: wgs
 * @date: 2019年6月29日 下午3:53:06
 */
public class EventDispatchManager {
    //缓存监听的事件与事件监听器的映射，由于一个事件对应多个监听器，所以value是一个数组
    private Map<String, List<IGameEventListener>> eventListenerMap = new HashMap<>();

    //向事件分发管理器中注册一个监听类
    public void registerListener(Class<? extends IGameEventMessage> eventClass, IGameEventListener listener) {
        String key = eventClass.getName();
        List<IGameEventListener> listeners = this.eventListenerMap.get(key);
        if (listeners == null) {
            listeners = new ArrayList<>();
            this.eventListenerMap.put(key, listeners);
        }
        listeners.add(listener);
    }

    public void sendGameEvent(Object origin, IGameEventMessage gameEventMessage) {
        String key = gameEventMessage.getClass().getName();
        List<IGameEventListener> listeners = this.eventListenerMap.get(key);
        if (listeners != null) {
            listeners.forEach(listener -> {
                listener.update(origin, gameEventMessage);
            });
        }
    }
}
